<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/**
 *                  ********************
 *    ************ EVENTS ADMIN CONTROLLER ************
 *                  ********************
 * 
 * 
 *              @todo PROGRAMSÁVOK!!!!!!!!!!!!!!
 * 
 */
class Events extends Admin_Controller {

    function __construct() {
        // Call the Model constructor
        parent::__construct();
        $this->load->model("event_model");
        $this->load->model("film_model");
        $this->load->model("programsav_model");
        // midnen programsavot betöltök
        $this->data['programsav_data'] = $this->programsav_model->get_programsavok();
        // minden film nevet és id-t betöltünk
        $film_get_options['select'] = 'film_id, eredeti_cim';
        $this->data['film_data'] = $this->film_model->get_films($film_get_options);
    }

    /**
     * 
     * Index Page for admin
     * 
     * 
     */
    public function index() {
        $this->event_list();
    }

    public function edit_event($id) {
        $this->data['title'] = "Esemény szerkesztése";
        // ha nincs id redirectelünk
        if (!isset($id)) {
            $this->session->set_flashdata('error_message', 'A szerkesztéshez id-t kell megadni.');
            redirect('admin/events');
        }
        // dátumokat visszaalakítjuk a view-nek ehető formára
        // az utolsó 3 karaktert pl levágjuk a HH:MM:SS-ből, mert 
        // azok a másodpercek, és az nem kell.
        $esemeny = $this->event_model->get_event($id);
        $kezdes = explode(' ', $esemeny->esemeny_kezdes);
        $vege = explode(' ', $esemeny->esemeny_vege);
        $esemeny->esemeny_kezdes_datum = $kezdes[0];
        $esemeny->esemeny_kezdes_hm = substr($kezdes[1], 0, -3);
        $esemeny->esemeny_vege_datum = $vege[0];
        $esemeny->esemeny_vege_hm = substr($vege[1], 0, -3);
        // végén visszarakjuk az átadandó adatba
        $this->data['esemeny_data'] = $esemeny;
        $this->_load_view('admin/events/event_edit_view', $this->data);
    }

    public function new_event() {
        $this->data['title'] = "Új esemény";
        $this->_load_view('admin/events/event_edit_view');
    }

    public function add_event() {
        $this->form_validation->set_rules('esemeny_cim', 'esemény címe', 'required|trim');
        $this->form_validation->set_rules('esemeny_kezdes_datum', 'esemény kezdete', 'trim');
        $this->form_validation->set_rules('esemeny_kezdes_hm', 'esemény kezdete', 'trim');
        $this->form_validation->set_rules('esemeny_vege_datum', 'esemény vége', 'trim');
        $this->form_validation->set_rules('esemeny_vege_hm', 'esemény vége', 'trim');
        $this->form_validation->set_rules('esemeny_leiras', 'rövid leírás', '');
        $this->form_validation->set_rules('esemeny_helyszin', 'esemény helyszín', '');
        $this->form_validation->set_rules('esemeny_programsav_id', 'programsáv', '');
        $this->form_validation->set_error_delimiters('', '');
        if ($this->form_validation->run() == FALSE) {
            $this->new_event();
            return;
        }
        // átjutunk az ellenőrzésen akkor lementjük az adatokat
        $eventdata = $this->input->post();

        $eventdata['esemeny_kezdes'] = $eventdata['esemeny_kezdes_datum'] . ' ' . $eventdata['esemeny_kezdes_hm'];
        $eventdata['esemeny_vege'] = $eventdata['esemeny_vege_datum'] . ' ' . $eventdata['esemeny_vege_hm'];

        // beletesszük a film cim slug-ot
        // string helper kell az inkrementáláshoz
        $this->load->helper('string');
        // addig inkrementáljuk, amíg már nem létezik az adatbázisban ilyen slug.
        $eventdata['esemeny_cim_slug'] = _generate_slug($eventdata['esemeny_cim']);
        // ha már van ilyen név inkrementálunk
        while ($this->event_model->get_event_by_slug($eventdata['esemeny_cim_slug']) != NULL) {
            $eventdata['esemeny_cim_slug'] = increment_string($eventdata['esemeny_cim_slug'], '-');
        }

        // kiszedjük ami nem kell
        unset($eventdata['esemeny_kezdes_datum']);
        unset($eventdata['esemeny_kezdes_hm']);
        unset($eventdata['esemeny_vege_datum']);
        unset($eventdata['esemeny_vege_hm']);
        // elmentjük
        $this->event_model->add_event($eventdata);
        // legközelebb találkozunk, most lista.
        $this->session->set_flashdata('message', 'Az új esemény: ' .
                $eventdata["esemeny_cim"] . ' sikeresen bekerült az adatbázisba.');
        redirect('admin/events');
    }

    public function update_event($id) {
        $this->form_validation->set_rules('esemeny_cim', 'esemény címe', 'required|trim');
        $this->form_validation->set_rules('esemeny_kezdes_datum', 'esemény kezdete', 'trim');
        $this->form_validation->set_rules('esemeny_kezdes_hm', 'esemény kezdete', 'trim');
        $this->form_validation->set_rules('esemeny_vege_datum', 'esemény vége', 'trim');
        $this->form_validation->set_rules('esemeny_vege_hm', 'esemény vége', 'trim');
        $this->form_validation->set_rules('esemeny_leiras', 'rövid leírás', '');
        $this->form_validation->set_rules('esemeny_helyszin', 'esemény helyszín', '');
        $this->form_validation->set_rules('esemeny_programsav_id', 'programsáv', '');
        $this->form_validation->set_error_delimiters('', '');
        if ($this->form_validation->run() == FALSE) {
            $this->new_event();
            return;
        }
        // átjutunk az ellenőrzésen akkor lementjük az adatokat
        $eventdata = $this->input->post();
        
        // dátumot állítunk helyes formátumra
        $eventdata['esemeny_kezdes'] = $eventdata['esemeny_kezdes_datum'] . ' ' . $eventdata['esemeny_kezdes_hm'];
        $eventdata['esemeny_vege'] = $eventdata['esemeny_vege_datum'] . ' ' . $eventdata['esemeny_vege_hm'];
        
        // beletesszük az event cim slug-ot
        // string helper kell az inkrementáláshoz
        $this->load->helper('string');
        // addig inkrementáljuk, amíg már nem létezik az adatbázisban ilyen slug.
        $eventdata['esemeny_cim_slug'] = _generate_slug($eventdata['esemeny_cim']);
        // ha már van ilyen név inkrementálunk
        while ($this->event_model->get_event_by_slug($eventdata['esemeny_cim_slug'], $id) != NULL) {
            $eventdata['esemeny_cim_slug'] = increment_string($eventdata['esemeny_cim_slug'], '-');
        }

        // belerakjuk az id-t
        $eventdata['esemeny_id'] = $id;

        // kiszedjük ami nem kell
        unset($eventdata['esemeny_kezdes_datum']);
        unset($eventdata['esemeny_kezdes_hm']);
        unset($eventdata['esemeny_vege_datum']);
        unset($eventdata['esemeny_vege_hm']);
        // elmentjük
        $this->event_model->update_event($eventdata);
        // legközelebb találkozunk, most lista.
        $this->session->set_flashdata('message', 'Az esemény: ' .
                $eventdata["esemeny_cim"] . ' adatai frissültek.');
        redirect('admin/events');
    }

    /**
     * 
     * Események listázása datatables-el
     * 
     */
    public function event_list() {
        $this->data['title'] = "Összes esemény";
        //function get_datatable_jquery($ajax_source_site_url, $table_name, $table_fields = array())
        //$datatable = get_datatable_jquery($ajax_source_site_url, $table_name, $table_fields = array());
        $this->data['dtables']['ajax_source_site_url'] = 'admin/events/ajax_get_table';
        $this->data['dtables']['edit_site_url'] = 'admin/events/edit_event';
        $this->data['dtables']['ajax_delete_site_url'] = 'admin/events/ajax_delete';
        $this->data['dtables']['table_name'] = 'events_table';
        $this->data['dtables']['table_fields'] =
                array('esemeny_id',
                    'esemeny_cim',
                    'esemeny_kezdes',
                    'esemeny_vege',
                    'esemeny_leiras',
                    'programsav_nev',
                    'eredeti_cim'/* a film eredeti cime */);
        $this->_load_view('admin/events/event_list_view', $this->data);
    }

    /**
     *  Event törlése
     * 
     * @param type $id
     * @return type 
     */
    public function ajax_delete($id) {
        try {
            $this->event_model->delete($id);
        } catch (Exception $e) {
            echo encode_json($e->getMessage());
            return;
        }
        echo encode_json("successful");
    }

    /**
     * Datatables-hez 
     */
    public function ajax_get_table() {
        /**
         * Ami bejön és fontos:
         * iDisplayStart
         * iDisplayLength
         * sSearch
         * sEcho    _ XSS protection
         * 
         * 
         * Ami kimegy:
         * 
         * iTotalRecords
         * iTotalDisplayRecords
         * sEcho
         * aaData
         */
        // elkérjük az összes postolt adatot
        $all_post = $this->input->post();

        // text helper kelleni fog
        $this->load->helper('text');

        //var_dump($all_post);
        // megnézzük mennyi column van a táblázatban
        $number_of_columns = $all_post['iColumns'];

        // megnézzük kell-e keresni valamire
        ($all_post['sSearch'] != '') ? $search_like = $all_post['sSearch'] : $search_like = NULL;

        // csinálunk egy listát a megjelítendő változókról
        // azaz adatbázisból az oszlopokról
        $select_from_database = "";
        for ($i = 0; $i < $number_of_columns; $i++) {
            $select_from_database .= $all_post["mDataProp_$i"];
            //a vesszőt az utolsóig hozzáadja, mivel ez felsorolás
            if ($i < $number_of_columns - 1)
                $select_from_database.=", ";
        }

        // SORBARENDEZÉS IMPLEMENTÁLÁSA
        // megszerezzük mi szerint kell sortolnunk
        $sort_by_id = $all_post["iSortCol_0"];
        // így megkapjuk a nevét
        $order_by = $all_post["mDataProp_$sort_by_id"];
        // és most hozzáadjuk az irányt
        $order_dir = $all_post["sSortDir_0"];

        // összeállítjuk a lekérést, amit a modelnek küldünk.
        $events_request = array(
            // keresés
            'search_like' => $search_like,
            // kiválasztás
            'select' => $select_from_database,
            // limit&offset
            'limit' => $all_post['iDisplayLength'],
            'offset' => $all_post['iDisplayStart'],
            'order_by' => $order_by,
            'order_dir' => $order_dir
        );

        $events = $this->event_model->get_events($events_request);

        foreach ($events as $event) {
            $event->DT_RowId = "esemeny_id_" . $event->esemeny_id;
            // levágjuk a másodperceket
            $event->esemeny_kezdes = substr($event->esemeny_kezdes, 0, -3);
            $event->esemeny_vege = substr($event->esemeny_vege, 0, -3);
            $event->esemeny_leiras = character_limiter($event->esemeny_leiras, 30);
            // nincs film hozzárendelve (vagy törölték)
            if ($event->eredeti_cim == "") {
                $event->eredeti_cim = "-";
            }
            // nincs programsáv hozzárendelve (vagy törölték)
            if ($event->programsav_nev == "") {
                $event->programsav_nev = "-";
            }
        }

        $data["iTotalRecords"] = $this->event_model->count();
        $data["iTotalDisplayRecords"] = $data["iTotalRecords"];
        $data["sEcho"] = $all_post["sEcho"];
        $data["aaData"] = $events;

        echo encode_json($data);
    }

}

